icon-browser: Stop using ::key-press-event
authorMatthias Clasen <mclasen@redhat.com>
Sun, 4 Feb 2018 21:21:37 +0000 (22:21 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Thu, 5 Apr 2018 17:26:53 +0000 (19:26 +0200)
demos/icon-browser/iconbrowserwin.c
demos/icon-browser/window.ui

index 116a70dc12ea81bac60ae47aa26fc07a88235b35..91be68373929a000fb66400b05c4ad07bf1cf8e1 100644 (file)
@@ -54,6 +54,7 @@ struct _IconBrowserWindow
   GtkWidget *image6;
   GtkWidget *label6;
   GtkWidget *description;
+  GtkEventController *controller;
 };
 
 struct _IconBrowserWindowClass
@@ -286,13 +287,16 @@ populate (IconBrowserWindow *win)
 }
 
 static gboolean
-key_press_event_cb (GtkWidget *widget,
-                    GdkEvent  *event,
-                    gpointer   data)
+key_event_cb (GtkEventController *controller,
+              guint               keyval,
+              guint               keycode,
+              GdkModifierType     state,
+              gpointer            data)
 {
   IconBrowserWindow *win = data;
 
-  return gtk_search_bar_handle_event (GTK_SEARCH_BAR (win->searchbar), event);
+  return gtk_search_bar_handle_event (GTK_SEARCH_BAR (win->searchbar),
+                                      gtk_get_current_event ());
 }
 
 static void
@@ -480,12 +484,31 @@ icon_browser_window_init (IconBrowserWindow *win)
 
   symbolic_toggled (GTK_TOGGLE_BUTTON (win->symbolic_radio), win);
 
+  win->controller = gtk_event_controller_key_new (GTK_WIDGET (win));
+  g_signal_connect (win->controller, "key-pressed", G_CALLBACK (key_event_cb), win);
+
   populate (win);
 }
 
+static void
+icon_browser_window_finalize (GObject *object)
+{
+  IconBrowserWindow *win = ICON_BROWSER_WINDOW (object);
+
+  g_hash_table_unref (win->contexts);
+
+  g_object_unref (win->controller);
+
+  G_OBJECT_CLASS (icon_browser_window_parent_class)->finalize (object);
+}
+
 static void
 icon_browser_window_class_init (IconBrowserWindowClass *class)
 {
+  GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+  object_class->finalize = icon_browser_window_finalize;
+
   g_type_ensure (ICON_STORE_TYPE);
 
   gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (class),
@@ -516,7 +539,6 @@ icon_browser_window_class_init (IconBrowserWindowClass *class)
   gtk_widget_class_bind_template_callback (GTK_WIDGET_CLASS (class), item_activated);
   gtk_widget_class_bind_template_callback (GTK_WIDGET_CLASS (class), selected_context_changed);
   gtk_widget_class_bind_template_callback (GTK_WIDGET_CLASS (class), symbolic_toggled);
-  gtk_widget_class_bind_template_callback (GTK_WIDGET_CLASS (class), key_press_event_cb);
   gtk_widget_class_bind_template_callback (GTK_WIDGET_CLASS (class), copy_to_clipboard);
 }
 
index c56dcbaa6cb8c2b4a920b9b354e35fef099caf8e..ae81f4af4957cbd85d66345ff6a6c4e0ea0aaef9 100644 (file)
@@ -9,7 +9,6 @@
     <property name="title" translatable="yes">Icon Browser</property>
     <property name="default-width">1024</property>
     <property name="default-height">768</property>
-    <signal name="key-press-event" handler="key_press_event_cb"/>
     <child type="titlebar">
       <object class="GtkHeaderBar" id="header">
         <property name="title" translatable="yes">Icon Browser</property>